{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Image Augementation for 3D images"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Powered by **Analytics Zoo/Spark** for deep learning, running on **Intel** architecture. In this demo, we will show some imaging processing methods on meniscus data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n",
      "Prepending /home/ding/anaconda3/envs/conda_py36/lib/python3.6/site-packages/bigdl/share/dllib/conf/spark-bigdl.conf to sys.path\n",
      "pyspark_submit_args is:  --driver-class-path /home/ding/anaconda3/envs/conda_py36/lib/python3.6/site-packages/bigdl/share/dllib/lib/bigdl-dllib-2.1.0-SNAPSHOT-jar-with-dependencies.jar pyspark-shell \n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import matplotlib\n",
    "matplotlib.use('Agg')\n",
    "%pylab inline\n",
    "from matplotlib import pyplot as plt\n",
    "import h5py\n",
    "from math import pi\n",
    "\n",
    "from bigdl.dllib.nncontext import *\n",
    "from bigdl.dllib.feature.common import *\n",
    "from bigdl.dllib.feature.image3d.transformation import *\n",
    "\n",
    "sc = init_nncontext(\"Image Augmentation 3D Example\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Load sample data using `h5py` library. We expand the dimension to meet the 3D image dimensions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ding/anaconda3/envs/conda_py36/lib/python3.6/site-packages/ipykernel_launcher.py:1: H5pyDeprecationWarning: The default file mode will change to 'r' (read-only) in h5py 3.0. To suppress this warning, pass the mode you need to h5py.File(), or set the global default h5.get_config().default_file_mode, or set the environment variable H5PY_DEFAULT_READONLY=1. Available modes are: 'r', 'r+', 'w', 'w-'/'x', 'a'. See the docs for details.\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    }
   ],
   "source": [
    "image = h5py.File(\"image/meniscus_full.mat\")['meniscus_im']\n",
    "sample = np.array(image)\n",
    "sample = np.expand_dims(sample,3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Shape of sample."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(20, 256, 256, 1)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create LocalImageSet"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createLocalImageSet\n"
     ]
    }
   ],
   "source": [
    "image_list=[sample]\n",
    "image_set = LocalImageSet(image_list=image_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create DistributedImageSet"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createDistributedImageSet\n"
     ]
    }
   ],
   "source": [
    "data_rdd = sc.parallelize([sample])\n",
    "image_set = DistributedImageSet(image_rdd=data_rdd)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Image Tranformation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Cropping"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createCrop3D\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(5, 40, 40, 1)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "start_loc = [13,80,125]\n",
    "patch = [5, 40, 40]\n",
    "crop = Crop3D(start=start_loc, patch_size=patch)\n",
    "cropped_imageset = crop(image_set)\n",
    "crop_data = cropped_imageset.get_image(key=\"imageTensor\").first()\n",
    "crop_data.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Rotate 30 degrees"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createRotate3D\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(5, 40, 40, 1)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "yaw = 0.0\n",
    "pitch = 0.0\n",
    "roll = pi/6\n",
    "\n",
    "rotate_30 = Rotate3D([yaw, pitch, roll])\n",
    "rotate_30_imageset = rotate_30(cropped_imageset)\n",
    "rotate_30_data = rotate_30_imageset.get_image(key=\"imageTensor\").first()\n",
    "rotate_30_data.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Rotate 90 degrees"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createRotate3D\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(5, 40, 40, 1)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "yaw = 0.0\n",
    "pitch = 0.0\n",
    "roll = pi/2\n",
    "\n",
    "rotate_90 = Rotate3D([yaw, pitch, roll])\n",
    "rotate_90_imageset = rotate_90(rotate_30_imageset)\n",
    "rotate_90_data = rotate_90_imageset.get_image(key=\"imageTensor\").first()\n",
    "rotate_90_data.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Random affine transformation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createAffineTransform3D\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(5, 40, 40, 1)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "random = np.random.rand(3, 3)\n",
    "affine = AffineTransform3D(random)\n",
    "affine_imageset = affine(rotate_90_imageset)\n",
    "affine_data = affine_imageset.get_image(key=\"imageTensor\").first()\n",
    "affine_data.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Pipeline of 3D transformers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createDistributedImageSet\n",
      "creating: createCrop3D\n",
      "creating: createRotate3D\n",
      "creating: createRotate3D\n",
      "creating: createAffineTransform3D\n",
      "creating: createChainedPreprocessing\n"
     ]
    }
   ],
   "source": [
    "image_set = DistributedImageSet(image_rdd=data_rdd)\n",
    "start_loc = [13,80,125]\n",
    "patch = [5, 40, 40]\n",
    "yaw = 0.0\n",
    "pitch = 0.0\n",
    "roll_30 = pi / 6\n",
    "roll_90 = pi / 2\n",
    "transformer = ChainedPreprocessing(\n",
    "    [Crop3D(start_loc, patch),\n",
    "    Rotate3D([yaw, pitch, roll_30]),\n",
    "    Rotate3D([yaw, pitch, roll_90]),\n",
    "    AffineTransform3D(random)])\n",
    "transformed = transformer(image_set)\n",
    "pipeline_data = transformed.get_image(key=\"imageTensor\").first()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Show Results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Pipeline Transformation')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 6 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=[10,10])\n",
    "y = fig.add_subplot(2,3,1)\n",
    "y.add_patch(plt.Rectangle((start_loc[2]-1,start_loc[1]-1),\n",
    "                          patch[1],\n",
    "                          patch[1], fill=False,\n",
    "                          edgecolor='red', linewidth=1.5)\n",
    "            )\n",
    "y.text(start_loc[2]-45, start_loc[1]-15,\n",
    "       'Cropped Region',\n",
    "       bbox=dict(facecolor='green', alpha=0.5),\n",
    "       color='white')\n",
    "y.imshow(sample[15,:,:,0],cmap='gray')\n",
    "y.set_title('Original Image')\n",
    "\n",
    "y = fig.add_subplot(2,3,2)\n",
    "y.imshow(crop_data[2,:,:,0],cmap='gray')\n",
    "y.set_title('Cropped Image')\n",
    "\n",
    "y = fig.add_subplot(2,3,3)\n",
    "y.imshow(rotate_30_data[2,:,:,0],cmap='gray')\n",
    "y.set_title('Rotate 30 Deg')\n",
    "\n",
    "y = fig.add_subplot(2,3,4)\n",
    "y.imshow(rotate_90_data[2,:,:,0],cmap='gray')\n",
    "y.set_title('Rotate 90 Deg')\n",
    "\n",
    "y = fig.add_subplot(2,3,5)\n",
    "y.imshow(affine_data[2,:,:,0],cmap='gray')\n",
    "y.set_title('Random Affine Transformation')\n",
    "\n",
    "y = fig.add_subplot(2,3,6)\n",
    "y.imshow(pipeline_data[2,:,:,0],cmap='gray')\n",
    "y.set_title('Pipeline Transformation')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
